#ifndef CALCGUI_H
#define CALCGUI_H

#include <QMainWindow>
#include <QSignalMapper>
#include <QLineEdit>
#include <QString>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QWidget>
#include <QLinkedList>
#include <QMenu>

class CalcGui : public QMainWindow
{
    Q_OBJECT
public:
    // Construtor. Inicializa a interface gráfica da calculadora em modo simples
    explicit CalcGui();

public slots:
    // Slot que recebe os sinais de clique nos botões e dipara ações da calculadora
    void execute (const QString &s);
    // Método que é chamado para construir botões específicos para a calculadora científica
    void changeToCientific();
    // Método que remove os botões da calculadora científica voltando ao modo simples
    void changeToSimple();
    // Método que mostra uma pequena caixa de diálogo com informções sobre os alunos desenvolvedores da calculadora
    void about();

private:
    // Apontador para o QSignalMapper utilizado para mapear botões da calculadora
    QSignalMapper *signalMapper;
    // Apontador para o display onde são mostrados os operandos e resultados
    QLineEdit *display;
    // Apontador para o layout que contém os botões referentes à calculadora em modo científico
    QVBoxLayout *cientificLayout;
    // Apontador para o layout que contém todos os botões da calculadora
    QHBoxLayout *keysLayout;
    // Lista de apontadores para widgets que serão instanciados ao mudar o modo para científico
    QLinkedList<QWidget*> widgetList;
    // Apontador para o menu da calculadora
    QMenu *menuShow;
    // Variável que controla o modo em que a caculadora está, simples ou científico
    bool cientific;
    int simpleSize;

};

#endif // CALCGUI_H
